#include "pathpage.h"
#include "ui_pathpage.h"
#include <QDir>
#include <QDebug>
#include <QFileDialog>

PathPage::PathPage(QWidget *parent) :
    QWizardPage(parent),
    ui(new Ui::PathPage)
{
    ui->setupUi(this);
    // 注册域
    // name* 第一个参数中名字以* 结尾表示该输入框必须填满后才能点击next
    // registerField 会受到isComplete的影响
    // 两者都有的情况下以isComplete的结果为主
    registerField("proName*",ui->lineEdit);
    registerField("proPath",ui->lineEdit_2);

    // 关联信号槽
    // lineEdit存在数据时会发送textEdited信号
    // QWizardPage: 当输入框中的填充数据后会触发 completeChanged 这个信号
    // 此时需要去重写 isComplete这个虚函数来判断按钮next,finish是否是启用还是禁用
    connect(ui->lineEdit,&QLineEdit::textEdited,this,&QWizardPage::completeChanged);
    connect(ui->lineEdit_2,&QLineEdit::textEdited,this,&QWizardPage::completeChanged);
    connect(ui->pushButton,&QPushButton::clicked,this,&PathPage::SlotHandlerBrowse);


    // 获取当前所在的路径 填充到lineEdit_2中
    QString dir = QDir::currentPath();
    ui->lineEdit_2->setText(dir);
    ui->lineEdit->setClearButtonEnabled(true);
    ui->lineEdit->setClearButtonEnabled(true);
}

bool PathPage::isComplete() const
{
    // 如果两个输入框都为空时则返回false
    ui->tips->setText("");
    if(ui->lineEdit->text() == "" || ui->lineEdit_2->text() == "")
            return false;
    // 获取路径
    QDir dir = ui->lineEdit_2->text();
    if(!dir.exists())
    {
        ui->tips->setText("path is not exit");
        return false;
    }
    // 获取绝对路径
//    qDebug() << "dir = " << dir;
    // absoluteFilePath: 拼接决定路径
    QString absFilePath = dir.absoluteFilePath(ui->lineEdit->text());
//    qDebug() << "absFilePath" << absFilePath;

    //构建目录看是否存在
    QDir absPath(absFilePath);
    // 需要创建一个不存在的项目路径
    if(absPath.exists())
    {
        ui->tips->setText("path is exited");
        return false;
    }

    return true;
}

void PathPage::GetProSettings(QString& name, QString &path)
{
    name = ui->lineEdit->text();
    path = ui->lineEdit_2->text();

}

void PathPage::SlotHandlerBrowse()
{
    QFileDialog file_dialog;
    // 设置文件对话框的模式，选择目录模式
    file_dialog.setFileMode(QFileDialog::Directory);
    file_dialog.setWindowTitle("选择导入文件");
    QString path = QDir::currentPath();
    // 设置初始显示的目录
    file_dialog.setDirectory(path);

    QStringList fileNames;
    // 测试了一下，也只能选择一个文件，所以直接QString也可以
    if(file_dialog.exec())
    {
        // 可能选择了很多个
        fileNames = file_dialog.selectedFiles();
    }
    // 导入文件
    QString import_file = fileNames.at(0);
    qDebug() << "import_string: " << import_file << endl;
    ui->lineEdit_2->setText(import_file);
}

PathPage::~PathPage()
{
    delete ui;
}
